from rest_framework import serializers
from apps.users.models import User


class AdminSerializer(serializers.ModelSerializer):

    class Meta:
        model = User
        # fields = ['id', 'username', 'email', 'mobile']
        fields = '__all__' # 要加入密码的保存序列化，所以传过来的数据直接都序列化保存

        # 为了在修改时，密码不显示，所以在password字段添加只写约束
        extra_kwargs = {
            'password': {
                'write_only': True
            }
        }

    # 重写create方法，因为密码要加密保存
    def create(self, validated_data):

        # 第一种方式，调用create_user方法保存(多对多不能用这种方法)
        # user = User.objects.create_user(**validated_data)

        # 调用父类方法创建管理员用户
        user = super().create(validated_data)
        # 用户密码加密
        password = validated_data.get('password')
        user.set_password(password)
        # 设置管理员
        user.is_staff = True
        # 保存数据
        user.save()

        return user

    # 调用父类实现更新，密码为加密的，所以需要判断密码是否修改，再去保存密码
    def update(self, instance, validated_data):
        # 继承父类update
        super().update(instance, validated_data)
        # 获取密码
        password = validated_data.get('password')
        # 判断密码是否被修改，因为前边设置了密码只写，所以展示页面密码栏没有内容,只要判断传过来的数据是否为空即可
        if password is not None:
            instance.set_password(password)
            instance.save()

        return instance

